#ifndef RAINBOWLOG_HPP
/**
 * @file rainbowlog.hpp
 * @brief 彩虹日志系统头文件
 * @details 定义日志级别、颜色设置以及日志记录和输出接口
 */
#define RAINBOWLOG_HPP

// 支持dll
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif

#include <string>

/**
 * @enum LogLevel
 * @brief 日志级别
 */
enum LogLevel
{
    INFO,
    WARNING,
    ERROR,
    NOTE,
    SILENT
};

// 日志颜色设置
static const char *COLOR_INFO = "\033[1;34m";
static const char *COLOR_WARNING = "\033[1;33m";
static const char *COLOR_ERROR = "\033[1;31m";
static const char *COLOR_NOTE = "\033[1;36m";

static const char *COLOR_RESET = "\033[0m";

/**
 * @brief 记录日志消息和级别
 *
 * @param msg 日志消息
 * @param level 日志级别
 */
void logMessage(std::string msg, LogLevel level);

/**
 * @brief 将日志输出到控制台
 *
 * @param msg 日志消息
 * @param level 日志级别
 */
void logToConsole(std::string msg, LogLevel level);

/**
 * @brief 初始化日志系统
 *
 * @param minLevel 日志级别阈值
 */
void initRainbowLog(LogLevel minLevel);

DLL_EXPORT void logMessage(std::string msg, LogLevel level);

DLL_EXPORT void logToConsole(std::string msg, LogLevel level);

DLL_EXPORT void initRainbowLog(LogLevel minLevel);

#endif